import { ElMessage } from 'element-plus';
import axios from 'axios';

// 从环境变量获取API基础路径
const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8080';
const API_PREFIX = import.meta.env.VITE_BASE_URL || '/api';

// 部门管理相关接口
const DEPARTMENT_LIST_ENDPOINT = '/depart/list';     // 部门列表查询接口
const DEPARTMENT_ADD_ENDPOINT = '/role/add';         // 添加部门接口
const DEPARTMENT_UPDATE_ENDPOINT = '/role/update';   // 更新部门接口
const DEPARTMENT_DELETE_ENDPOINT = '/depart/';       // 删除部门接口
const DEPARTMENT_ADD_ADMIN_ENDPOINT = '/depart/addAdmin';  // 添加部门管理员接口
const DEPARTMENT_UPDATE_ADMIN_ENDPOINT = '/depart/upAdmin'; // 修改部门管理员接口

// 创建axios实例
const axiosInstance = axios.create({
  baseURL: API_BASE_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
});

// 设置请求拦截器，添加认证令牌
axiosInstance.interceptors.request.use(
  (config) => {
    // 从localStorage获取token并添加Bearer前缀
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 部门管理接口
export const departmentService = {
  // 获取部门列表数据，支持分页和搜索
  async getDepartmentList(page = 1, pageSize = 20, searchParams = {}): Promise<any> {
    try {
      // 构建查询参数
      const queryParams = new URLSearchParams({
        page: page.toString(),
        pageSize: pageSize.toString()
      });
      
      // 如果有搜索条件，添加到查询参数中
      if (Object.keys(searchParams).length > 0) {
        queryParams.append('where', JSON.stringify(searchParams));
      }
      
      const apiUrl = `${API_PREFIX}${DEPARTMENT_LIST_ENDPOINT}?${queryParams.toString()}`;
      console.log('API: 请求部门列表, URL:', apiUrl);
      
      const response = await axiosInstance.get(apiUrl);
      console.log('API: 部门列表接口原始响应:', response);
      
      // 检查响应结构
      if (response.data) {
        // 格式: { code: 200, data: { rows: [...], total: n } }
        if (response.data.code === 200 && response.data.data && Array.isArray(response.data.data.rows)) {
          console.log('API: 获取部门列表成功, 数量:', response.data.data.rows.length);
          return {
            list: response.data.data.rows,
            total: response.data.data.total || response.data.data.rows.length
          };
        }
        // 直接返回数组
        else if (Array.isArray(response.data)) {
          console.log('API: 获取部门列表成功 (直接数组), 数量:', response.data.length);
          return {
            list: response.data,
            total: response.data.length
          };
        }
        // 无法处理的格式，返回空数组
        else {
          console.warn('API: 部门列表数据格式不符合预期:', response.data);
          ElMessage.warning('部门数据格式异常，请联系管理员');
          return { list: [], total: 0 };
        }
      } else {
        // 响应格式异常
        console.error('API: 部门列表接口响应格式异常:', response);
        ElMessage.error('获取部门列表失败，响应格式异常');
        return { list: [], total: 0 };
      }
    } catch (error) {
      // 网络错误或其他异常
      console.error('API: 获取部门列表请求失败:', error);
      ElMessage.error('获取部门列表失败，请检查网络连接');
      return { list: [], total: 0 };
    }
  },

  // 添加部门
  async addDepartment(departmentData: any): Promise<any> {
    try {
      const apiUrl = `${API_PREFIX}${DEPARTMENT_ADD_ENDPOINT}`;
      console.log('添加部门，URL:', apiUrl, '参数:', departmentData);
      
      const response = await axiosInstance.post(apiUrl, departmentData);
      
      if (response.data && response.data.code === 200) {
        console.log('添加部门成功:', response.data);
        ElMessage.success(response.data?.message || '添加部门成功');
        return response.data.data;
      } else {
        console.error('添加部门失败:', response.data);
        ElMessage.error(response.data?.message || '添加部门失败');
        throw new Error(response.data?.message || '添加部门接口返回异常');
      }
    } catch (error: any) {
      console.error('添加部门请求失败:', error);
      ElMessage.error(error.message || '添加部门失败');
      throw error;
    }
  },

  // 更新部门
  async updateDepartment(departmentData: any): Promise<any> {
    try {
      const apiUrl = `${API_PREFIX}${DEPARTMENT_UPDATE_ENDPOINT}`;
      console.log('更新部门，URL:', apiUrl, '参数:', departmentData);
      
      const response = await axiosInstance.put(apiUrl, departmentData);
      
      if (response.data && response.data.code === 200) {
        console.log('更新部门成功:', response.data);
        ElMessage.success(response.data?.message || '更新部门成功');
        return response.data.data;
      } else {
        console.error('更新部门失败:', response.data);
        ElMessage.error(response.data?.message || '更新部门失败');
        throw new Error(response.data?.message || '更新部门接口返回异常');
      }
    } catch (error: any) {
      console.error('更新部门请求失败:', error);
      ElMessage.error(error.message || '更新部门失败');
      throw error;
    }
  },

  // 删除部门
  async deleteDepartment(id: number): Promise<any> {
    try {
      const apiUrl = `${API_PREFIX}${DEPARTMENT_DELETE_ENDPOINT}${id}`;
      console.log('删除部门，URL:', apiUrl);
      
      const response = await axiosInstance.delete(apiUrl);
      
      if (response.data && response.data.code === 200) {
        console.log('删除部门成功:', response.data);
        ElMessage.success(response.data?.message || '删除部门成功');
        return response.data.data;
      } else {
        console.error('删除部门失败:', response.data);
        ElMessage.error(response.data?.message || '删除部门失败');
        throw new Error(response.data?.message || '删除部门接口返回异常');
      }
    } catch (error: any) {
      console.error('删除部门请求失败:', error);
      ElMessage.error(error.message || '删除部门失败');
      throw error;
    }
  },

  // 添加部门管理员
  async addDepartmentAdmin(departmentId: number, userIds: number[]): Promise<any> {
    try {
      const apiUrl = `${API_PREFIX}${DEPARTMENT_ADD_ADMIN_ENDPOINT}`;
      console.log('添加部门管理员，URL:', apiUrl, '参数:', { department_id: departmentId, user_ids: userIds });
      
      const response = await axiosInstance.post(apiUrl, {
        department_id: departmentId,
        user_ids: userIds
      });
      
      if (response.data && response.data.code === 200) {
        console.log('添加部门管理员成功:', response.data);
        ElMessage.success(response.data?.message || '添加部门管理员成功');
        return response.data.data;
      } else {
        console.error('添加部门管理员失败:', response.data);
        ElMessage.error(response.data?.message || '添加部门管理员失败');
        throw new Error(response.data?.message || '添加部门管理员接口返回异常');
      }
    } catch (error: any) {
      console.error('添加部门管理员请求失败:', error);
      ElMessage.error(error.message || '添加部门管理员失败');
      throw error;
    }
  },

  // 更新部门管理员
  async updateDepartmentAdmin(departmentId: number, userIds: number[]): Promise<any> {
    try {
      const apiUrl = `${API_PREFIX}${DEPARTMENT_UPDATE_ADMIN_ENDPOINT}`;
      console.log('更新部门管理员，URL:', apiUrl, '参数:', { department_id: departmentId, user_ids: userIds });
      
      const response = await axiosInstance.put(apiUrl, {
        department_id: departmentId,
        user_ids: userIds
      });
      
      if (response.data && response.data.code === 200) {
        console.log('更新部门管理员成功:', response.data);
        ElMessage.success(response.data?.message || '更新部门管理员成功');
        return response.data.data;
      } else {
        console.error('更新部门管理员失败:', response.data);
        ElMessage.error(response.data?.message || '更新部门管理员失败');
        throw new Error(response.data?.message || '更新部门管理员接口返回异常');
      }
    } catch (error: any) {
      console.error('更新部门管理员请求失败:', error);
      ElMessage.error(error.message || '更新部门管理员失败');
      throw error;
    }
  }
}; 